<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
		<title>JS作用域和作用域链</title>
		<style type="text/css">

		</style>
	</head>
	<body>
		1、作用域：
		-- 作用域是定义变量的区域，它有一套访问变量的规则，这套规则来管理浏览器引擎如何在当前作用域以及嵌套的作用域中根据变量（标识符）进行变量查找。

		2、作用域链：
		-- 作用域链的作用是保证对执行环境有权访问的所有变量和函数的有序访问，通过作用域链，我们可以访问到外层环境的变量和函数。
		-- 本质上是一个指向变量对象的指针列表
		-- 作用域链的前端始终都是当前执行上下文的变量对象。全局执行上下文的变量对象（也就是全局对象）始终是作用域链的最后一个对象。


		作用域就是每个函数、变量都有自己的区域，保证执行环境的有序访问，和应有的访问权限。
		分全局作用域和局部作用域，全局作用域无法访问到局部的，但是局部的可以访问到全局作用域下的函数、变量。
		当我们读取或操作某个变量、函数数时，先从自身作用查找，没有查找到就往上一层作用域查找，而这个查找过程就是作用域链
	</body>
	<script type="text/JavaScript">
		// 以下三个例子帮助更好的理解这个概念：
	
	
	//==========例1==========
	var scope='global';
	function fn(){
	  console.log(scope);
	  var scope='local';
	  console.log(scope);
	  
	}
	fn();    //输出结果？
	console.log(scope);//输出结果？
	  
	//===========例2==========
	  
	var scope='global';
	function fn(){
	  console.log(scope);
	  scope='local';
	  console.log(scope);
	}
	fn();    //输出结果？
	console.log(scope);//输出结果？
	  
	//===========例3=========
	  
	var scope='global';
	function fn(scope){
	  console.log(scope);
	  scope='local';
	  console.log(scope);
	}
	fn();    //输出结果？
	console.log(scope);//输出结果？
	
	
	// 例1分别输出[undefined , local , global]
	// 例2分别输出[global , local , local]，
	// 例3结果输出[undefined , local , global]
	</script>
</html>
